
class Solution
{
public:

	//dfs
	bool flag[230] = { 0 };
	//城市群数量
	int citys(vector<vector<int>> vv)
	{
		int size = vv.size();
		int res = 0;  //城市群的个数
		for (int i = 0;i < size;++i)
		{
			if (!flag[i])
			{
				++res;
				dfs(vv, i);
			}
		}
	}
	void dfs(vector<vector<int>> vv, int pos)
	{
		flag[pos] = true;
		int size = vv.size();
		for (int i = 0;i < size;++i)
		{
			if (!flag[i] && vv[pos][i])
			{
				dfs(vv, i);
			}
		}
	}


    //bfs
    int citys(vector<vector<int>> vv)
	{
		bool flag[230] = { 0 };
		int size = vv.size();
		int res = 0;
		for (int i = 0;i < size;++i)
		{
			if (!flag[i])
			{
				++res;
				queue<int> q;
				q.push(i);
				flag[i] = true;
				while (!q.empty())
				{
					int pos = q.top();
					q.pop();
					for (int j = 0;j < vv.size();++j)
					{
						if (!flag[j] && vv[pos][j])
						{
							q.push(j);
							flag[j] = true;
						}
					}
				}
			}
		}
		return res;
	}
};

//求最短回文子串的长度（最短回文子串的长度要超过1）
int shortest(string str)
{
	int res = -1;
	int length = str.length();
	for (int i = 0;i < length;++i)
	{
		if (i + 1 < length && str[i] == str[i + 1])
		{
			res = 2;
			break;
		}
		if (i + 2 < length && str[i] == str[i + 2])
		{
			res = 3; //不能break，因为可能后面有长度为2的回文子串
		}
	}
	return res;
}



//不相邻取数 
//数组长度：1 <= n <= 2*10^5个数
const int N = 10;
int main()
{
	
	int n = 0;
	cin >> n;
	int arr[N] = { 0 };
	for (int i = 1;i <= n;++i)
	{
		cin >> arr[i];
	}
	int f[N] = { 0 };  //f[i]代表的是：数组中的前i个数据中的最后一个位置元素必选，此时的最大和
	int g[N] = { 0 };//g[i]代表的是：数组中的前i个数据中的最后一个位置元素必不选，此时的最大和
	f[1] = arr[1];
	g[1] = 0;
	for (int i = 2;i <= n;++i)
	{
		f[i] = g[i - 1] + arr[i];
		g[i] = std::max(f[i - 1], g[i - 1]);
	}
	cout << std::max(f[n], g[n]);
	return 0;
}

//水果成篮II(滑动窗口)
class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        unordered_map<int,int> hashtable;
        int front = 0;
        int back = 0;
        int res = INT_MIN;
        while(back < fruits.size())  //也可以用一个变量kind来判断此时窗口中水果种类个数
        {
            hashtable[fruits[back]]++;
            while(hashtable.size() > 2)
            {
                if(hashtable[fruits[front]]-- == 1)
                {
                    hashtable.erase(fruits[front]);
                }
                ++front;
            }
            res = std::max(res,back-front+1);
            ++back;
        }
        return res;

    }
};


//压缩字符串
//利用字符重复出现的次数，编写一种方法，实现基本的字符串压缩功能。比如，字符串aabcccccaaa会变为a2bc5a3。
//1.如果只有一个字符，1不用写
string compressString(string param) {
        // write code here
        size_t len = param.length();
        string res = "";
        pair<char, int> p{param[0], 1};
        for (int i = 1; i < len; ++i) {
            if (p.first != param[i]) {
                res.push_back(p.first);
                if (p.second > 1) {
                    res += to_string(p.second);
                }
                p.first = param[i];
                p.second = 1;
            }
            else
            {
                p.second++;
            }
        }
        res.push_back(p.first);
        if (p.second > 1) {
            res += to_string(p.second);
        }
        return res;